ARM汇编:数据处理指令集:MOV、ADD、ADDS、ADC、SUB、SUBS、SBC、RSB、MUL、AND、ORR、EOR、BIC、CMP、TST、TEQ、LSL、LSR、ASR、RORV | 您所在的位置:网站首页 › arm指令 mov › ARM汇编:数据处理指令集:MOV、ADD、ADDS、ADC、SUB、SUBS、SBC、RSB、MUL、AND、ORR、EOR、BIC、CMP、TST、TEQ、LSL、LSR、ASR、RORV |
ARM指令集——数据处理指令
数据处理指令有:
MOV、ADD、ADDS、ADC、SUB、 SUBS、SBC、RSB、MUL、AND、 ORR、EOR、BIC、CMP、TST、 TEQ、LSL、LSR、ASR、RORV 数据处理指令语法 , , ;第一个位置必须是寄存器,第二操作数可以是寄存器,也可以是立即数数据传送指令 MOV mov r1, #0x1 ;r1 = 0x1 0x1 是立即数 mov r2, r1 ;r2 = r1 mvn r3, r2 ;r3 = ~r2 mov r1, 0xffffff00 ;0xffffff00 不是立即数,只是编译器在编译阶段对其进行了替换 mvn r1, 0x000000ff ;替换的指令 ;一条数据传送指令 mov reg, #n mov reg占用 bit[31:12],bit[11:0]留给立即数使用,因此立即数自包含2^12个 ;一个立即数由 bits[8:0]循环右移 2 * bits[11:9]得到。(一个八位的数循环右移偶数次得到) ;立即数的本质是包含于指令中的数,占用指令本身的空间加法指令 ADD ;加法指令执行时,若没有进位 CPSR 'C' 位置 0 mov r0, #1 mov r1, #1 add r2, r1, r0 ;r2 = r1 + r0 add r2, r1, #2 ;r2 = r1 + 2数据操作对CPSR的影响 ;默认情况下,数据处理指令不影响条件码标志位,但可以选择通过添加“S”来影响标志位。 mov r1, #0mov r2, #-1 adds r3, r1, r2带进位的加法指令 ADC ;两个64位数相加,第一个64位的低32位放在 r0,高位放到 r1,第二个64位数的低32位放在 r2 高32位放在 r3 ;编写代码实现两个64位数的和,结果的低32位放在 r4 高32位放在 r5 mov r0, #0xfffffffe ;第一个数的低32位 mov r1, #1 ;第一个数的高32位 mov r2, #0x5 ;第二个数的低32位 mov r3, #1 ;第二个数的高32位 adds r4, r0, r2 adc r5, r1, r3 ; adc运算的实质是 r5 = r1 + r3 + 'C' 'C'位 CPSR 进位标志减法指令 SUB ;减法指令执行时,没有借位时 CPSR 'C' 位置 1 mov r0, #5 mov r1, #3 sub r2, r0, r1 ;r2 = r0 - r1带借位的减法指令 SBC mov r0, #1 ;第一个数的低32位 mov r1, #3 ;第一个数的高32位 mov r2, #3 ;第二个数的低32位 mov r3, #1 ;第二个输的高32位 subs r4, r0, r2 sbc r5, r1, r3逆向减法指令 RSB mov r0, #3 rsb r1, r0, #5 ;r1 = 5 - r0乘法指令 MUL ;为了提高效率,任何乘法指令不可以使用立即数 mov r0, #3 mov r1, #5 mov r2, r0, r1 ;r2 = r0 * r1乘——累加指令 MLA mla r3 ,r0, r1, r2 ;r3 = (r0 * r1) + r2逻辑与指令 AND mov r0, #0xf0 mov r1, #0x0f and r2, r0, r1 ;r2 = r0 & r1逻辑或指令 ORR ORR指令的格式为:ORR{条件}{S} 目的寄存器,操作数1,操作数2 ORR指令用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。操作数1应该是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于设置操作数1的某些位。 指令示例:ORR R0,R0,#3;该指令设置R0的0、1位,其余位保持不变。 orr r0,r0,#0xd3 0xd3=1101 0111 将r0与0xd3作算数或运算,然后将结果返还给r0,即把r0的bit[7:6]和bit[4]和bit[2:0]置为1。 mov r0, #0xf0 mov r1, #0x0f orr r2, r0, r1 ;r2 = r0 | r1逻辑异或运算指令 EOR mov r0, #0xf0 mov r1, #0x0f eor r2, r0, r1 ;r2 = r0 ^ r1位清零指令 BIC 指令格式:BIC{cond}{S} Rd,Rn,operand2 BIC指令将Rn 的值与操作数operand2 的反码按位逻辑”与”,结果存放到目的寄存器Rd 中。指令示例:BIC R0,R0,#0x0F ;将R0最低4位清零,其余位不变。 mov r0, #0xff bic r0, r0, #0xf ;第二个操作数的每一位为 1 就把第一个操作数对应的位清零比较指令 CMP cmp(compare)指令进行比较两个操作数的大小 例:cmp oprd1,oprd2 为第一个操作减去第二个操作数,但不影响第两个操作数的值,它影响flag的CF,ZF,OF,AF,PF 我们怎么判断大小呢?若执行指令后 (1)ZF ZF=1 这个简单,则说明两个数相等,因为zero为1说明结果为0。 (2)CF 当无符号时: CF=1 则说明了有进位或借位,cmp是进行的减操作,故可以看出为借位,所以,此时oprd1oprd2 当有符号时: 若SF=0,OF=0 则说明了此时的值为正数,没有溢出,可以直观的看出,oprd1>oprd2 若SF=1,OF=0 则说明了此时的值为负数,没有溢出,则为oprd1 |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |